package com.itheima.threadpool;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

@SuppressWarnings("all")
public class Demo3 {
    public static void main(String[] args) {

        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                1,//参数一：核心线程数量
                3,//参数二：最大线程数
                1000,//参数三：空闲线程最大存活时间
                TimeUnit.SECONDS,//参数四：时间单位
                new ArrayBlockingQueue(2),//参数五：任务队列
                Executors.defaultThreadFactory(),//参数六：创建线程工厂
                //new ThreadPoolExecutor.AbortPolicy()//参数七：任务的拒绝策略
                //1.丢弃任务并抛出RejectedExecutionException异常。是默认的策略。
                //new ThreadPoolExecutor.DiscardPolicy()
                //2.丢弃任务，但是不抛出异常 这是不推荐的做法。
                //new ThreadPoolExecutor.DiscardOldestPolicy()
                //3.抛弃队列中等待最久的任务 然后把当前任务加入队列中。
                new ThreadPoolExecutor.CallerRunsPolicy()
                //4.调用任务的run()方法绕过线程池直接执行。
        );
        for (int i = 0; i < 6; i++) {
            int x = i;
            pool.submit(new Thread(() -> {
                System.out.println(Thread.currentThread().getName() + "在执行任务" + x);
            }));
        }
        //pool.submit(new Thread(()->{System.out.println(Thread.currentThread().getName()+"在执行");}));
        pool.shutdown();
    }
}
